Setup

library(ggplot2)
library(dplyr)
library(tidyr)
library(purrr)
source("/home/guestA/n70275b/work/rscripts/geomNorm.R")

# Helper function
#ggpoints <- function(x,...) 
#  ggplot(x,...) + geom_point(size=3,stroke=1) +
#  ggrepel::geom_text_repel(size=4) + theme_minimal() + mycolor

## ラベルあり
ggpoints <- function(x,...) 
  ggplot(x,...) + geom_point(stroke=1) +
  ggrepel::geom_text_repel(size=4) + theme_minimal() + mycolor

## ラベルなし
#ggpoints <- function(x,...) 
#  ggplot(x,...) + geom_point(stroke=1) + theme_minimal() + mycolor


print(Sys.Date())
[1] "2020-10-13"
print(sessionInfo(),locale=FALSE)
R version 4.0.1 (2020-06-06)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux

Matrix products: default
BLAS/LAPACK: /usr/local/intel2018_up1/compilers_and_libraries_2018.0.128/linux/mkl/lib/intel64_lin/libmkl_intel_lp64.so

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] purrr_0.3.4   tidyr_1.1.2   ggplot2_3.3.2 dplyr_1.0.2  

loaded via a namespace (and not attached):
  [1] colorspace_1.4-1            ellipsis_0.3.1              XVector_0.28.0              GenomicRanges_1.40.0        rstudioapi_0.11             farver_2.0.3                ggrepel_0.8.2              
  [8] DT_0.15                     bit64_4.0.5                 AnnotationDbi_1.50.3        fansi_0.4.1                 xml2_1.3.2                  R.methodsS3_1.8.1           splines_4.0.1              
 [15] geneplotter_1.66.0          knitr_1.30                  jsonlite_1.7.1              Rsamtools_2.4.0             seqLogo_1.54.3              annotate_1.66.0             GO.db_3.11.4               
 [22] dbplyr_1.4.4                png_0.1-7                   R.oo_1.24.0                 pheatmap_1.0.12             uwot_0.1.8                  shiny_1.5.0                 msigdbr_7.2.1              
 [29] readr_1.4.0                 compiler_4.0.1              httr_1.4.2                  lazyeval_0.2.2              assertthat_0.2.1            Matrix_1.2-18               fastmap_1.0.1              
 [36] cli_2.0.2                   later_1.1.0.1               htmltools_0.5.0             prettyunits_1.1.1           tools_4.0.1                 TFMPvalue_0.0.8             gtable_0.3.0               
 [43] glue_1.4.2                  GenomeInfoDbData_1.2.3      reshape2_1.4.4              rappdirs_0.3.1              Rcpp_1.0.5                  Biobase_2.48.0              vctrs_0.3.4                
 [50] Biostrings_2.56.0           rtracklayer_1.48.0          CNEr_1.24.0                 xfun_0.18                   stringr_1.4.0               mime_0.9                    miniUI_0.1.1.1             
 [57] lifecycle_0.2.0             poweRlaw_0.70.6             gtools_3.8.2                XML_3.99-0.5                zlibbioc_1.34.0             scales_1.1.1                BSgenome_1.56.0            
 [64] hms_0.5.3                   promises_1.1.1              parallel_4.0.1              SummarizedExperiment_1.18.2 RColorBrewer_1.1-2          yaml_2.2.1                  curl_4.3                   
 [71] memoise_1.1.0               gridExtra_2.3               chromVAR_1.10.0             biomaRt_2.45.5              stringi_1.5.3               RSQLite_2.2.1               genefilter_1.70.0          
 [78] S4Vectors_0.26.1            caTools_1.18.0              BiocGenerics_0.34.0         BiocParallel_1.22.0         GenomeInfoDb_1.24.2         rlang_0.4.8                 pkgconfig_2.0.3            
 [85] matrixStats_0.57.0          bitops_1.0-6                pracma_2.2.9                evaluate_0.14               lattice_0.20-41             GenomicAlignments_1.24.0    htmlwidgets_1.5.2          
 [92] labeling_0.3                bit_4.0.4                   tidyselect_1.1.0            ggsci_2.9                   plyr_1.8.6                  magrittr_1.5                DESeq2_1.28.1              
 [99] R6_2.4.1                    IRanges_2.22.2              generics_0.0.2              DelayedArray_0.14.1         DBI_1.1.0                   pillar_1.4.6                withr_2.3.0                
[106] KEGGREST_1.28.0             survival_3.2-7              RCurl_1.98-1.2              tibble_3.0.3                crayon_1.3.4                utf8_1.1.4                  plotly_4.9.2.1             
[113] BiocFileCache_1.12.1        rmarkdown_2.4               viridis_0.5.1               progress_1.2.2              TFBSTools_1.26.0            locfit_1.5-9.4              grid_4.0.1                 
[120] data.table_1.13.0           blob_1.2.1                  digest_0.6.25               xtable_1.8-4                httpuv_1.5.4                R.utils_2.10.1              DirichletMultinomial_1.30.0
[127] openssl_1.4.3               stats4_4.0.1                munsell_0.5.0               viridisLite_0.3.0           askpass_1.1                
select <- dplyr::select
rename <- dplyr::rename #191203
count <- dplyr::count #191203

Parameters

modify here

# Files


#deftable <- "~/akuwakado/kuwakado/BRBSeq/H3mm18_Dox_0432lane2/Final_Rserver_191203/deftable_BRB_noumi_new_190520_fin191205ver.txt" #Umi補正なし (BRB)

deftable <- "/home/guestA/o70578a/akuwakado/kuwakado/BRBSeq/H3mm18_Dox_0432lane2/Final_Last_Rserver_200811/deftable_BRB_noumi_new_190520_Last20200811ver.txt"

#deftable <- "~/akuwakado/kuwakado/BRBSeq/H3mm18_Dox_0432lane2/Final_Rserver_191203/deftable_BRB_noumi_new_190520_fin191205ver.txt" #Umi補正なし (BRB)


#deftable <- "deftable_BRB_noumi_new_190520.txt" #Umi補正なし (BRB)

#deftable <- "~/akuwakado/kuwakado/BRBSeq/H3mm18_Dox_0432lane2/deftable_BRB_noumi_new_190520.txt" #Umi補正なし (BRB)


## Data selection (filter rows of deftable)
#use <- quo(!grepl("^18",group) & (group != "Nc-minusTryd"))
#use <- quo(TRUE) # use all
use <- quo(type != "C2C12")

# Species specific parameters
species <- "Mus musculus"
biomartann <- "mmusculus_gene_ensembl"
maxchrom <- 19 # 19: mouse, 22: human


# Graphics
# aesthetic mapping of labels
#myaes <- aes(colour=enzyme,shape=leg,label=rep) 
#myaes <- aes(colour=growth,shape=type,size=count) #ラベルなし
#myaes <- aes(colour=growth,shape=type,label=replicate,size=count) #ラベルあり
#myaes <- aes(colour=enzyme,shape=leg,label=replicate) #ラベルあり
#myaes <- aes(colour=enzyme,shape=leg,label=factor(rep))
#myaes <- aes(colour=type, shape=revcro, label=read, size=count)
#myaes <- aes(colour=type, shape=revcro, label=read)

#myaes <- aes(colour=growth,shape=type,label=replicate,size=count) #ラベルあり
#myaes <- aes(colour=time,shape=type,size=count,label=replicate)
#myaes <- aes(colour=WT_KO_intact_CTX, shape=Day,size=count,label=f_m)

#myaes <- aes(colour=WT_KO_intact_CTX, shape=Day, label=f_m) #サイズを変えず
#myaes <- aes(colour=growth,shape=type,label=replicate,size=count) #ラベルあり
myaes <- aes(colour=time,shape=type,label=rep,size=count) #ラベルあり
myaes2 <- aes(colour=time,shape=type) #kuwa add

# color palette of points: See vignette("ggsci")
mycolor <- ggsci::scale_color_aaas()



# PCA/UMAP
scalerows <- TRUE # gene-wise scaling (pattern is the matter?)
ntop <- 500 # number of top-n genes with high variance
seed <- 123 # set another number if UMAP looks not good
n_nei <- 6  # number of neighboring data points in UMAP #ここをどうしたらいい?


# DESeq2
#model <- ~groupn+lead #dateも追加
#model <- ~leg + enzyme + leg:enzyme
#model <- ~type+growth#+type:growth
#model <- ~group+lead


#model <- ~group
#model <- ~type+growth+type:growth #これでは相互作用が入っていない
#model <- ~type+growth #これでは相互作用が入っていない


model <- ~group
#model <- ~type+growth+growth:type

fdr <- 0.1 # acceptable false discovery rate
lfcthreth <- log2(1) # threshold in abs(log2FC)

# controls should be placed in the right
contrast <- list(
  
  group_UI_Doxplus_vs_minus = c("group", "BRB_UI_DoxPlus", "BRB_UI_DoxMinus"),
  group_0h_Doxplus_vs_minus = c("group", "BRB_0h_DoxPlus", "BRB_0h_DoxMinus"),
  group_24h_Doxplus_vs_minus = c("group", "BRB_24h_DoxPlus", "BRB_24h_DoxMinus"),
  group_48h_Doxplus_vs_minus = c("group", "BRB_48h_DoxPlus", "BRB_48h_DoxMinus")
  
  
  #group_UI_Doxplus_vs_minus = c("group", "Doxplus_UI", "Doxminus_UI"),
  #group_Diff0h_Doxplus_vs_minus = c("group", "Doxplus_Diff0h", "Doxminus_Diff0h"),
  #group_Diff24h_Doxplus_vs_minus = c("group", "Doxplus_Diff24h", "Doxminus_Diff24h"),
  #group_Diff48h_Doxplus_vs_minus = c("group", "Doxplus_Diff48h", "Doxminus_Diff48h")
  
  
  #Intercept = list("Intercept"), # reference level
  #leg_LvsR = c("leg", "L", "R"),
  #enz_KvsC = c("enzyme","K","C")
  #legL.enzK = list("legL.enzymeK") # interaction
  
  #type_Doxplus_vs_minus = c("type", "Doxplus", "Doxminus")
)

Retrieve Biomart

#if(!exists("e2g")){
#  #ensembl <- biomaRt::useMart("ENSEMBL_MART_ENSEMBL",host="asia.ensembl.org")
#  #ensembl <- biomaRt::useMart("ENSEMBL_MART_ENSEMBL",host="uswest.ensembl.org")
#  ensembl <- biomaRt::useMart("ENSEMBL_MART_ENSEMBL",host="useast.ensembl.org")
#  mart <- biomaRt::useDataset(biomartann,mart=ensembl)
#  e2g <- biomaRt::getBM(attributes=c("ensembl_gene_id","external_gene_name",
#    "gene_biotype","chromosome_name"), mart=mart) %>% as_tibble %>%
#  rename(
#    ens_gene = ensembl_gene_id,
#    ext_gene = external_gene_name,
#    biotype = gene_biotype,
#    chr = chromosome_name
#  )
#}

e2g <- readr::read_csv("/home/guestA/o70578a/akuwakado/kuwakado/BRBSeq/H3mm18_Dox_0432lane2/Final_Last_Rserver_200811/ensemble_list_useast.csv")

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character()
)
annotate <- partial(right_join,e2g,by="ens_gene")

#annotate <- partial(right_join,e2g,by="ens_gene")

#-----#
nrow(e2g)
[1] 56305
#readr::write_csv(e2g,"ensemble_list_asia.csv")
#readr::write_csv(e2g,"ensemble_list_uswest.csv")
#readr::write_csv(e2g,"ensemble_list_useast.csv")

Load counts


filepath_summary <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/ChIL01100111_ATAC0049L1__3T3_EGFP18_Dox__TSS_pm5kb_20200624.count.txt"

filepath_selectedTSScount <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/ChIL01100111_ATAC0049L1__3T3_EGFP18_Dox__TSS_pm5kb_20200624.count__count_firstTSS_select.csv"


colnames_title <- c("ens_gene","chr","TSSstart","TSSend","strand","TSS","Start","End")
  
samples_ATAC <- c(
  "ATAC_UI_DoxMinus_1","ATAC_UI_DoxMinus_2","ATAC_UI_DoxMinus_3","ATAC_UI_DoxMinus_4",
  "ATAC_UI_DoxPlus_1","ATAC_UI_DoxPlus_2","ATAC_UI_DoxPlus_3","ATAC_UI_DoxPlus_4",
  "ATAC_48h_DoxMinus_1","ATAC_48h_DoxMinus_2","ATAC_48h_DoxMinus_3","ATAC_48h_DoxMinus_4",
  "ATAC_48h_DoxPlus_1","ATAC_48h_DoxPlus_2","ATAC_48h_DoxPlus_3","ATAC_48h_DoxPlus_4")

samples_H3p3 <- c(
  "H3p3_UI_DoxMinus_1","H3p3_UI_DoxMinus_2","H3p3_UI_DoxPlus_1","H3p3_UI_DoxPlus_2",
  "H3p3_0h_DoxMinus_1","H3p3_0h_DoxMinus_2","H3p3_0h_DoxPlus_1","H3p3_0h_DoxPlus_2",
  "H3p3_24h_DoxMinus_1","H3p3_24h_DoxMinus_2","H3p3_24h_DoxPlus_1","H3p3_24h_DoxPlus_2",
  "H3p3_48h_DoxMinus_1","H3p3_48h_DoxMinus_2","H3p3_48h_DoxPlus_1","H3p3_48h_DoxPlus_2")

samples_H3K27ac <- c(
  "H3K27ac_UI_DoxMinus_1","H3K27ac_UI_DoxMinus_2","H3K27ac_UI_DoxPlus_1","H3K27ac_UI_DoxPlus_2",
  "H3K27ac_0h_DoxMinus_1","H3K27ac_0h_DoxMinus_2","H3K27ac_0h_DoxPlus_1","H3K27ac_0h_DoxPlus_2",
  "H3K27ac_24h_DoxMinus_1","H3K27ac_24h_DoxMinus_2","H3K27ac_24h_DoxPlus_1","H3K27ac_24h_DoxPlus_2",
  "H3K27ac_48h_DoxMinus_1","H3K27ac_48h_DoxMinus_2","H3K27ac_48h_DoxPlus_1","H3K27ac_48h_DoxPlus_2")

samples_H3K4me3 <- c(
  "H3K4me3_UI_DoxMinus_1","H3K4me3_UI_DoxMinus_2","H3K4me3_UI_DoxPlus_1","H3K4me3_UI_DoxPlus_2",
  "H3K4me3_0h_DoxMinus_1","H3K4me3_0h_DoxMinus_2","H3K4me3_0h_DoxPlus_1","H3K4me3_0h_DoxPlus_2",
  "H3K4me3_24h_DoxMinus_1","H3K4me3_24h_DoxMinus_2","H3K4me3_24h_DoxPlus_1","H3K4me3_24h_DoxPlus_2",
  "H3K4me3_48h_DoxMinus_1","H3K4me3_48h_DoxMinus_2","H3K4me3_48h_DoxPlus_1","H3K4me3_48h_DoxPlus_2")


selectedTSScount <- readr::read_csv(filepath_selectedTSScount) %>% mutate_if(is.double, as.integer)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  .default = col_double(),
  chr = col_character(),
  ens_gene = col_character(),
  score = col_character(),
  strand = col_character()
)
ℹ Use `spec()` for the full column specifications.
selectedTSScount1 <- selectedTSScount %>% dplyr::select(all_of(colnames_title), all_of(samples_H3p3), all_of(samples_H3K4me3),all_of(samples_H3K27ac), all_of(samples_ATAC)) %>% dplyr::rename(TSSminus5kb=TSSstart,TSSplus5kb=TSSend)

nrow(selectedTSScount)
[1] 55450
colnames(selectedTSScount)
 [1] "chr"                     "ens_gene"                "TSSstart"                "TSSend"                  "score"                   "strand"                  "TSS"                    
 [8] "Start"                   "End"                     "position"                "ATAC_UI_DoxMinus_1"      "ATAC_UI_DoxMinus_2"      "ATAC_UI_DoxMinus_3"      "ATAC_UI_DoxMinus_4"     
[15] "ATAC_UI_DoxPlus_1"       "ATAC_UI_DoxPlus_2"       "ATAC_UI_DoxPlus_3"       "ATAC_UI_DoxPlus_4"       "ATAC_48h_DoxMinus_1"     "ATAC_48h_DoxMinus_2"     "ATAC_48h_DoxMinus_3"    
[22] "ATAC_48h_DoxMinus_4"     "ATAC_48h_DoxPlus_1"      "ATAC_48h_DoxPlus_2"      "ATAC_48h_DoxPlus_3"      "ATAC_48h_DoxPlus_4"      "H3p3_UI_DoxMinus_1"      "H3p3_UI_DoxMinus_2"     
[29] "H3p3_UI_DoxPlus_1"       "H3p3_UI_DoxPlus_2"       "H3p3_0h_DoxMinus_1"      "H3p3_0h_DoxMinus_2"      "H3p3_0h_DoxPlus_1"       "H3p3_0h_DoxPlus_2"       "H3p3_24h_DoxMinus_1"    
[36] "H3p3_24h_DoxMinus_2"     "H3p3_24h_DoxPlus_1"      "H3p3_24h_DoxPlus_2"      "H3p3_48h_DoxMinus_1"     "H3p3_48h_DoxMinus_2"     "H3p3_48h_DoxPlus_1"      "H3p3_48h_DoxPlus_2"     
[43] "H3K27ac_UI_DoxMinus_1"   "H3K27ac_UI_DoxMinus_2"   "H3K27ac_UI_DoxPlus_1"    "H3K27ac_UI_DoxPlus_2"    "H3K27ac_0h_DoxMinus_1"   "H3K27ac_0h_DoxMinus_2"   "H3K27ac_0h_DoxPlus_1"   
[50] "H3K27ac_0h_DoxPlus_2"    "H3K27ac_24h_DoxMinus_1"  "H3K27ac_24h_DoxMinus_2"  "H3K27ac_24h_DoxPlus_1"   "H3K27ac_24h_DoxPlus_2"   "H3K27ac_48h_DoxMinus_1"  "H3K27ac_48h_DoxMinus_2" 
[57] "H3K27ac_48h_DoxPlus_1"   "H3K27ac_48h_DoxPlus_2"   "H3K4me3_UI_DoxMinus_1"   "H3K4me3_UI_DoxMinus_2"   "H3K4me3_UI_DoxPlus_1"    "H3K4me3_UI_DoxPlus_2"    "H3K4me3_0h_DoxMinus_1"  
[64] "H3K4me3_0h_DoxMinus_2"   "H3K4me3_0h_DoxPlus_1"    "H3K4me3_0h_DoxPlus_2"    "H3K4me3_24h_DoxMinus_1"  "H3K4me3_24h_DoxMinus_2"  "H3K4me3_24h_DoxPlus_1"   "H3K4me3_24h_DoxPlus_2"  
[71] "H3K4me3_48h_DoxMinus_1"  "H3K4me3_48h_DoxMinus_2"  "H3K4me3_48h_DoxPlus_1"   "H3K4me3_48h_DoxPlus_2"   "H3K27me3_UI_DoxMinus_1"  "H3K27me3_UI_DoxMinus_2"  "H3K27me3_UI_DoxPlus_1"  
[78] "H3K27me3_UI_DoxPlus_2"   "H3K27me3_0h_DoxMinus_1"  "H3K27me3_0h_DoxMinus_2"  "H3K27me3_0h_DoxPlus_1"   "H3K27me3_0h_DoxPlus_2"   "H3K27me3_24h_DoxMinus_1" "H3K27me3_24h_DoxMinus_2"
[85] "H3K27me3_24h_DoxPlus_1"  "H3K27me3_24h_DoxPlus_2"  "H3K27me3_48h_DoxMinus_1" "H3K27me3_48h_DoxMinus_2" "H3K27me3_48h_DoxPlus_1"  "H3K27me3_48h_DoxPlus_2" 
####
nrow(selectedTSScount1)
[1] 55450
colnames(selectedTSScount1)
 [1] "ens_gene"               "chr"                    "TSSminus5kb"            "TSSplus5kb"             "strand"                 "TSS"                    "Start"                  "End"                   
 [9] "H3p3_UI_DoxMinus_1"     "H3p3_UI_DoxMinus_2"     "H3p3_UI_DoxPlus_1"      "H3p3_UI_DoxPlus_2"      "H3p3_0h_DoxMinus_1"     "H3p3_0h_DoxMinus_2"     "H3p3_0h_DoxPlus_1"      "H3p3_0h_DoxPlus_2"     
[17] "H3p3_24h_DoxMinus_1"    "H3p3_24h_DoxMinus_2"    "H3p3_24h_DoxPlus_1"     "H3p3_24h_DoxPlus_2"     "H3p3_48h_DoxMinus_1"    "H3p3_48h_DoxMinus_2"    "H3p3_48h_DoxPlus_1"     "H3p3_48h_DoxPlus_2"    
[25] "H3K4me3_UI_DoxMinus_1"  "H3K4me3_UI_DoxMinus_2"  "H3K4me3_UI_DoxPlus_1"   "H3K4me3_UI_DoxPlus_2"   "H3K4me3_0h_DoxMinus_1"  "H3K4me3_0h_DoxMinus_2"  "H3K4me3_0h_DoxPlus_1"   "H3K4me3_0h_DoxPlus_2"  
[33] "H3K4me3_24h_DoxMinus_1" "H3K4me3_24h_DoxMinus_2" "H3K4me3_24h_DoxPlus_1"  "H3K4me3_24h_DoxPlus_2"  "H3K4me3_48h_DoxMinus_1" "H3K4me3_48h_DoxMinus_2" "H3K4me3_48h_DoxPlus_1"  "H3K4me3_48h_DoxPlus_2" 
[41] "H3K27ac_UI_DoxMinus_1"  "H3K27ac_UI_DoxMinus_2"  "H3K27ac_UI_DoxPlus_1"   "H3K27ac_UI_DoxPlus_2"   "H3K27ac_0h_DoxMinus_1"  "H3K27ac_0h_DoxMinus_2"  "H3K27ac_0h_DoxPlus_1"   "H3K27ac_0h_DoxPlus_2"  
[49] "H3K27ac_24h_DoxMinus_1" "H3K27ac_24h_DoxMinus_2" "H3K27ac_24h_DoxPlus_1"  "H3K27ac_24h_DoxPlus_2"  "H3K27ac_48h_DoxMinus_1" "H3K27ac_48h_DoxMinus_2" "H3K27ac_48h_DoxPlus_1"  "H3K27ac_48h_DoxPlus_2" 
[57] "ATAC_UI_DoxMinus_1"     "ATAC_UI_DoxMinus_2"     "ATAC_UI_DoxMinus_3"     "ATAC_UI_DoxMinus_4"     "ATAC_UI_DoxPlus_1"      "ATAC_UI_DoxPlus_2"      "ATAC_UI_DoxPlus_3"      "ATAC_UI_DoxPlus_4"     
[65] "ATAC_48h_DoxMinus_1"    "ATAC_48h_DoxMinus_2"    "ATAC_48h_DoxMinus_3"    "ATAC_48h_DoxMinus_4"    "ATAC_48h_DoxPlus_1"     "ATAC_48h_DoxPlus_2"     "ATAC_48h_DoxPlus_3"     "ATAC_48h_DoxPlus_4"    
print(selectedTSScount1)
#### save
TSScount_writefile1 <- basename(filepath_selectedTSScount) %>% gsub("ChIL01100111","ChILseq",.) %>% gsub("ATAC0049L1","ATACseq",.) %>% gsub(".count__count_firstTSS_select","__CountMatrix",.) %>% gsub(".count__count_firstTSS_select","___CountMatrix",.)
print(TSScount_writefile1)
[1] "ChILseq_ATACseq__3T3_EGFP18_Dox__TSS_pm5kb_20200624__CountMatrix.csv"
selectedTSScount1 %>% readr::write_csv(TSScount_writefile1) ##これを登録
##

#それぞれのlog2FC (読み込みが大変なため、そのまま登録)
filepath_log2FC_H3p3 <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/2gun/TSS_pm5kb_20200624_resultsall_fdr0p1_H3p3.csv"

filepath_log2FC_H3K4me3 <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/2gun/TSS_pm5kb_20200624_resultsall_fdr0p1_H3K4me3.csv"

filepath_log2FC_H3K27ac <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/2gun/TSS_pm5kb_20200624_resultsall_fdr0p1_H3K27ac.csv"

filepath_log2FC_ATAC <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/2gun/TSS_pm5kb_20200624_resultsall_fdr0p1_ATAC.csv"

####

log2FC_H3p3 <- readr::read_csv(filepath_log2FC_H3p3)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  aspect = col_character(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character(),
  baseMean = col_double(),
  log2FoldChange = col_double(),
  lfcSE = col_double(),
  stat = col_double(),
  pvalue = col_double(),
  padj = col_double()
)
colnames(log2FC_H3p3)
 [1] "aspect"         "ens_gene"       "ext_gene"       "biotype"        "chr"            "baseMean"       "log2FoldChange" "lfcSE"          "stat"           "pvalue"         "padj"          
log2FC_H3p3 %>% group_by(aspect) %>%  summarise(n())
`summarise()` ungrouping output (override with `.groups` argument)
####
log2FC_H3K4me3 <- readr::read_csv(filepath_log2FC_H3K4me3)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  aspect = col_character(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character(),
  baseMean = col_double(),
  log2FoldChange = col_double(),
  lfcSE = col_double(),
  stat = col_double(),
  pvalue = col_double(),
  padj = col_double()
)
colnames(log2FC_H3K4me3)
 [1] "aspect"         "ens_gene"       "ext_gene"       "biotype"        "chr"            "baseMean"       "log2FoldChange" "lfcSE"          "stat"           "pvalue"         "padj"          
log2FC_H3K4me3 %>% group_by(aspect) %>%  summarise(n())
`summarise()` ungrouping output (override with `.groups` argument)
####
log2FC_H3K27ac <- readr::read_csv(filepath_log2FC_H3K27ac)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  aspect = col_character(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character(),
  baseMean = col_double(),
  log2FoldChange = col_double(),
  lfcSE = col_double(),
  stat = col_double(),
  pvalue = col_double(),
  padj = col_double()
)
colnames(log2FC_H3K27ac)
 [1] "aspect"         "ens_gene"       "ext_gene"       "biotype"        "chr"            "baseMean"       "log2FoldChange" "lfcSE"          "stat"           "pvalue"         "padj"          
log2FC_H3K27ac %>% group_by(aspect) %>%  summarise(n())
`summarise()` ungrouping output (override with `.groups` argument)
####
log2FC_ATAC <- readr::read_csv(filepath_log2FC_ATAC)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  aspect = col_character(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character(),
  baseMean = col_double(),
  log2FoldChange = col_double(),
  lfcSE = col_double(),
  stat = col_double(),
  pvalue = col_double(),
  padj = col_double()
)
colnames(log2FC_ATAC)
 [1] "aspect"         "ens_gene"       "ext_gene"       "biotype"        "chr"            "baseMean"       "log2FoldChange" "lfcSE"          "stat"           "pvalue"         "padj"          
log2FC_ATAC %>% group_by(aspect) %>%  summarise(n())
`summarise()` ungrouping output (override with `.groups` argument)
####

log2FC_correlationlist <- readr::read_csv("/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/log2FC/tables/Spread_log2FC_ChILATACBRB_cutoff10__withCluster__H3p3clus3.csv")

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character(),
  chr = col_character(),
  time = col_character(),
  H3p3 = col_double(),
  H3K4me3 = col_double(),
  H3K27ac = col_double(),
  H3K27me3 = col_double(),
  ATAC = col_double(),
  BRB = col_double(),
  BRBgroupMean = col_double(),
  H3p3cluster = col_double(),
  BRBDEGcluster = col_double()
)
log2FC_corrtable <- log2FC_correlationlist %>% dplyr::select(-H3K27me3) %>% dplyr::rename(H3p3_log2FC_Doxplus_vs_minus=H3p3,  H3K4me3_log2FC_Doxplus_vs_minus=H3K4me3, H3K27ac_log2FC_Doxplus_vs_minus=H3K27ac, ATAC_log2FC_Doxplus_vs_minus=ATAC, BRB_log2FC_Doxplus_vs_minus=BRB) %>% dplyr::rename(BRB_normalizedcount_groupMean=BRBgroupMean)

nrow(log2FC_correlationlist)
[1] 13452
colnames(log2FC_correlationlist)
 [1] "ens_gene"      "ext_gene"      "biotype"       "chr"           "time"          "H3p3"          "H3K4me3"       "H3K27ac"       "H3K27me3"      "ATAC"          "BRB"           "BRBgroupMean" 
[13] "H3p3cluster"   "BRBDEGcluster"
nrow(log2FC_corrtable)
[1] 13452
colnames(log2FC_corrtable)
 [1] "ens_gene"                        "ext_gene"                        "biotype"                         "chr"                             "time"                            "H3p3_log2FC_Doxplus_vs_minus"   
 [7] "H3K4me3_log2FC_Doxplus_vs_minus" "H3K27ac_log2FC_Doxplus_vs_minus" "ATAC_log2FC_Doxplus_vs_minus"    "BRB_log2FC_Doxplus_vs_minus"     "BRB_normalizedcount_groupMean"   "H3p3cluster"                    
[13] "BRBDEGcluster"                  
log2FC_corrtable %>% group_by(time) %>% summarise(count=n())
`summarise()` ungrouping output (override with `.groups` argument)
log2FC_corrtable %>% filter(!is.na(BRB_normalizedcount_groupMean)) %>% group_by(time) %>% summarise(count=n())
`summarise()` ungrouping output (override with `.groups` argument)
###
log2FC_corrtable %>% group_by(time) %>% filter(BRBDEGcluster=="3") %>% summarise(count=n())
`summarise()` ungrouping output (override with `.groups` argument)
log2FC_corrtable %>% filter(!is.na(BRB_normalizedcount_groupMean)) %>% group_by(time) %>% filter(BRBDEGcluster=="3") %>% summarise(count=n())
`summarise()` ungrouping output (override with `.groups` argument)
###
log2FC_corrtable %>% group_by(time) %>% filter(BRBDEGcluster=="3") %>% filter(ext_gene=="Acta1")
NA

"/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__zscore_All.csv"
[1] "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__zscore_All.csv"

#それぞれのNormCount (読み込みが大変なため、そのまま登録)
filepath_Normcount_H3p3 <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv"
filepath_Normcount_H3K4me3 <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv"
filepath_Normcount_H3K27ac <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv"
filepath_Normcount_ATAC <- "/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv"

readr::read_csv(filepath_Normcount_H3p3)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  .default = col_double(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character()
)
ℹ Use `spec()` for the full column specifications.

4182 parsing failures.
  row col expected actual                                                                                                                                                                                                                                        file
51016 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv'
51017 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv'
51018 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv'
51019 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv'
51020 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3p3_genename.csv'
..... ... ........ ...... ...........................................................................................................................................................................................................................................
See problems(...) for more details.
readr::read_csv(filepath_Normcount_H3K4me3)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  .default = col_double(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character()
)
ℹ Use `spec()` for the full column specifications.

4182 parsing failures.
  row col expected actual                                                                                                                                                                                                                                           file
51016 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv'
51017 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv'
51018 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv'
51019 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv'
51020 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K4me3_genename.csv'
..... ... ........ ...... ..............................................................................................................................................................................................................................................
See problems(...) for more details.
readr::read_csv(filepath_Normcount_H3K27ac)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  .default = col_double(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character()
)
ℹ Use `spec()` for the full column specifications.

4182 parsing failures.
  row col expected actual                                                                                                                                                                                                                                           file
51016 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv'
51017 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv'
51018 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv'
51019 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv'
51020 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_H3K27ac_genename.csv'
..... ... ........ ...... ..............................................................................................................................................................................................................................................
See problems(...) for more details.
readr::read_csv(filepath_Normcount_ATAC)

─ Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
  .default = col_double(),
  ens_gene = col_character(),
  ext_gene = col_character(),
  biotype = col_character()
)
ℹ Use `spec()` for the full column specifications.

4182 parsing failures.
  row col expected actual                                                                                                                                                                                                                                        file
51016 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv'
51017 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv'
51018 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv'
51019 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv'
51020 chr a double      X '/home/guestA/o70578a/akuwakado/kuwakado/ChILSeq2/Komatsu_3T3_EGFP_H3mm18_Dox_chIl_0111NOVAseq/TSS_count/ChILAll_TSS_pm5kb_withATAC/R_server_Last_20200811_BRB_ATAC_ChIL_fistExon_mainH3p3/TSS_pm5kb_20200624__normcount_ATAC_genename.csv'
..... ... ........ ...... ...........................................................................................................................................................................................................................................
See problems(...) for more details.
LS0tCnRpdGxlOiAiW0xhc3QgMjAwMDkwOSwgRmluYWwgMTkxMjA1LTEyMTIsIDE4cHJvamVjdCwgM1QzXSBNYWtlQ291bnRtYXRyaXhfZm9yR0VPXzIwMTAxMiBUU1NwbTVrYl9fM1QzX0VHRlAxOF9Eb3hfMjAyMDA4MTFfX21haW5IM3AzX0NoSUwwMTEwMDExMV9BVEFDMDA0OSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiB5ZXMKICBwZGZfZG9jdW1lbnQ6IAogICAga2VlcF90ZXg6IHllcwogICAgbGF0ZXhfZW5naW5lOiBsdWFsYXRleAotLS0KCiMjIyBTZXR1cAoKYGBge3IgbGlicmFyaWVzLG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShwdXJycikKc291cmNlKCIvaG9tZS9ndWVzdEEvbjcwMjc1Yi93b3JrL3JzY3JpcHRzL2dlb21Ob3JtLlIiKQoKIyBIZWxwZXIgZnVuY3Rpb24KI2dncG9pbnRzIDwtIGZ1bmN0aW9uKHgsLi4uKSAKIyAgZ2dwbG90KHgsLi4uKSArIGdlb21fcG9pbnQoc2l6ZT0zLHN0cm9rZT0xKSArCiMgIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplPTQpICsgdGhlbWVfbWluaW1hbCgpICsgbXljb2xvcgoKIyMg44Op44OZ44Or44GC44KKCmdncG9pbnRzIDwtIGZ1bmN0aW9uKHgsLi4uKSAKICBnZ3Bsb3QoeCwuLi4pICsgZ2VvbV9wb2ludChzdHJva2U9MSkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplPTQpICsgdGhlbWVfbWluaW1hbCgpICsgbXljb2xvcgoKIyMg44Op44OZ44Or44Gq44GXCiNnZ3BvaW50cyA8LSBmdW5jdGlvbih4LC4uLikgCiMgIGdncGxvdCh4LC4uLikgKyBnZW9tX3BvaW50KHN0cm9rZT0xKSArIHRoZW1lX21pbmltYWwoKSArIG15Y29sb3IKCgpwcmludChTeXMuRGF0ZSgpKQpwcmludChzZXNzaW9uSW5mbygpLGxvY2FsZT1GQUxTRSkKCnNlbGVjdCA8LSBkcGx5cjo6c2VsZWN0CnJlbmFtZSA8LSBkcGx5cjo6cmVuYW1lICMxOTEyMDMKY291bnQgPC0gZHBseXI6OmNvdW50ICMxOTEyMDMKCgoKYGBgCiMjIyBQYXJhbWV0ZXJzCgoqbW9kaWZ5IGhlcmUqCgpgYGB7ciBwYXJhbXN9CiMgRmlsZXMKCgojZGVmdGFibGUgPC0gIn4vYWt1d2FrYWRvL2t1d2FrYWRvL0JSQlNlcS9IM21tMThfRG94XzA0MzJsYW5lMi9GaW5hbF9Sc2VydmVyXzE5MTIwMy9kZWZ0YWJsZV9CUkJfbm91bWlfbmV3XzE5MDUyMF9maW4xOTEyMDV2ZXIudHh0IiAjVW1p6KOc5q2j44Gq44GXIChCUkIpCgpkZWZ0YWJsZSA8LSAiL2hvbWUvZ3Vlc3RBL283MDU3OGEvYWt1d2FrYWRvL2t1d2FrYWRvL0JSQlNlcS9IM21tMThfRG94XzA0MzJsYW5lMi9GaW5hbF9MYXN0X1JzZXJ2ZXJfMjAwODExL2RlZnRhYmxlX0JSQl9ub3VtaV9uZXdfMTkwNTIwX0xhc3QyMDIwMDgxMXZlci50eHQiCgojZGVmdGFibGUgPC0gIn4vYWt1d2FrYWRvL2t1d2FrYWRvL0JSQlNlcS9IM21tMThfRG94XzA0MzJsYW5lMi9GaW5hbF9Sc2VydmVyXzE5MTIwMy9kZWZ0YWJsZV9CUkJfbm91bWlfbmV3XzE5MDUyMF9maW4xOTEyMDV2ZXIudHh0IiAjVW1p6KOc5q2j44Gq44GXIChCUkIpCgoKI2RlZnRhYmxlIDwtICJkZWZ0YWJsZV9CUkJfbm91bWlfbmV3XzE5MDUyMC50eHQiICNVbWnoo5zmraPjgarjgZcgKEJSQikKCiNkZWZ0YWJsZSA8LSAifi9ha3V3YWthZG8va3V3YWthZG8vQlJCU2VxL0gzbW0xOF9Eb3hfMDQzMmxhbmUyL2RlZnRhYmxlX0JSQl9ub3VtaV9uZXdfMTkwNTIwLnR4dCIgI1VtaeijnOato+OBquOBlyAoQlJCKQoKCiMjIERhdGEgc2VsZWN0aW9uIChmaWx0ZXIgcm93cyBvZiBkZWZ0YWJsZSkKI3VzZSA8LSBxdW8oIWdyZXBsKCJeMTgiLGdyb3VwKSAmIChncm91cCAhPSAiTmMtbWludXNUcnlkIikpCiN1c2UgPC0gcXVvKFRSVUUpICMgdXNlIGFsbAp1c2UgPC0gcXVvKHR5cGUgIT0gIkMyQzEyIikKCiMgU3BlY2llcyBzcGVjaWZpYyBwYXJhbWV0ZXJzCnNwZWNpZXMgPC0gIk11cyBtdXNjdWx1cyIKYmlvbWFydGFubiA8LSAibW11c2N1bHVzX2dlbmVfZW5zZW1ibCIKbWF4Y2hyb20gPC0gMTkgIyAxOTogbW91c2UsIDIyOiBodW1hbgoKCiMgR3JhcGhpY3MKIyBhZXN0aGV0aWMgbWFwcGluZyBvZiBsYWJlbHMKI215YWVzIDwtIGFlcyhjb2xvdXI9ZW56eW1lLHNoYXBlPWxlZyxsYWJlbD1yZXApIAojbXlhZXMgPC0gYWVzKGNvbG91cj1ncm93dGgsc2hhcGU9dHlwZSxzaXplPWNvdW50KSAj44Op44OZ44Or44Gq44GXCiNteWFlcyA8LSBhZXMoY29sb3VyPWdyb3d0aCxzaGFwZT10eXBlLGxhYmVsPXJlcGxpY2F0ZSxzaXplPWNvdW50KSAj44Op44OZ44Or44GC44KKCiNteWFlcyA8LSBhZXMoY29sb3VyPWVuenltZSxzaGFwZT1sZWcsbGFiZWw9cmVwbGljYXRlKSAj44Op44OZ44Or44GC44KKCiNteWFlcyA8LSBhZXMoY29sb3VyPWVuenltZSxzaGFwZT1sZWcsbGFiZWw9ZmFjdG9yKHJlcCkpCiNteWFlcyA8LSBhZXMoY29sb3VyPXR5cGUsIHNoYXBlPXJldmNybywgbGFiZWw9cmVhZCwgc2l6ZT1jb3VudCkKI215YWVzIDwtIGFlcyhjb2xvdXI9dHlwZSwgc2hhcGU9cmV2Y3JvLCBsYWJlbD1yZWFkKQoKI215YWVzIDwtIGFlcyhjb2xvdXI9Z3Jvd3RoLHNoYXBlPXR5cGUsbGFiZWw9cmVwbGljYXRlLHNpemU9Y291bnQpICPjg6njg5njg6vjgYLjgooKI215YWVzIDwtIGFlcyhjb2xvdXI9dGltZSxzaGFwZT10eXBlLHNpemU9Y291bnQsbGFiZWw9cmVwbGljYXRlKQojbXlhZXMgPC0gYWVzKGNvbG91cj1XVF9LT19pbnRhY3RfQ1RYLCBzaGFwZT1EYXksc2l6ZT1jb3VudCxsYWJlbD1mX20pCgojbXlhZXMgPC0gYWVzKGNvbG91cj1XVF9LT19pbnRhY3RfQ1RYLCBzaGFwZT1EYXksIGxhYmVsPWZfbSkgI+OCteOCpOOCuuOCkuWkieOBiOOBmgojbXlhZXMgPC0gYWVzKGNvbG91cj1ncm93dGgsc2hhcGU9dHlwZSxsYWJlbD1yZXBsaWNhdGUsc2l6ZT1jb3VudCkgI+ODqeODmeODq+OBguOCigpteWFlcyA8LSBhZXMoY29sb3VyPXRpbWUsc2hhcGU9dHlwZSxsYWJlbD1yZXAsc2l6ZT1jb3VudCkgI+ODqeODmeODq+OBguOCigpteWFlczIgPC0gYWVzKGNvbG91cj10aW1lLHNoYXBlPXR5cGUpICNrdXdhIGFkZAoKIyBjb2xvciBwYWxldHRlIG9mIHBvaW50czogU2VlIHZpZ25ldHRlKCJnZ3NjaSIpCm15Y29sb3IgPC0gZ2dzY2k6OnNjYWxlX2NvbG9yX2FhYXMoKQoKCgojIFBDQS9VTUFQCnNjYWxlcm93cyA8LSBUUlVFICMgZ2VuZS13aXNlIHNjYWxpbmcgKHBhdHRlcm4gaXMgdGhlIG1hdHRlcj8pCm50b3AgPC0gNTAwICMgbnVtYmVyIG9mIHRvcC1uIGdlbmVzIHdpdGggaGlnaCB2YXJpYW5jZQpzZWVkIDwtIDEyMyAjIHNldCBhbm90aGVyIG51bWJlciBpZiBVTUFQIGxvb2tzIG5vdCBnb29kCm5fbmVpIDwtIDYgICMgbnVtYmVyIG9mIG5laWdoYm9yaW5nIGRhdGEgcG9pbnRzIGluIFVNQVAgI+OBk+OBk+OCkuOBqeOBhuOBl+OBn+OCieOBhOOBhO+8nwoKCiMgREVTZXEyCiNtb2RlbCA8LSB+Z3JvdXBuK2xlYWQgI2RhdGXjgoLov73liqAKI21vZGVsIDwtIH5sZWcgKyBlbnp5bWUgKyBsZWc6ZW56eW1lCiNtb2RlbCA8LSB+dHlwZStncm93dGgjK3R5cGU6Z3Jvd3RoCiNtb2RlbCA8LSB+Z3JvdXArbGVhZAoKCiNtb2RlbCA8LSB+Z3JvdXAKI21vZGVsIDwtIH50eXBlK2dyb3d0aCt0eXBlOmdyb3d0aCAj44GT44KM44Gn44Gv55u45LqS5L2c55So44GM5YWl44Gj44Gm44GE44Gq44GECiNtb2RlbCA8LSB+dHlwZStncm93dGggI+OBk+OCjOOBp+OBr+ebuOS6kuS9nOeUqOOBjOWFpeOBo+OBpuOBhOOBquOBhAoKCm1vZGVsIDwtIH5ncm91cAojbW9kZWwgPC0gfnR5cGUrZ3Jvd3RoK2dyb3d0aDp0eXBlCgpmZHIgPC0gMC4xICMgYWNjZXB0YWJsZSBmYWxzZSBkaXNjb3ZlcnkgcmF0ZQpsZmN0aHJldGggPC0gbG9nMigxKSAjIHRocmVzaG9sZCBpbiBhYnMobG9nMkZDKQoKIyBjb250cm9scyBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSByaWdodApjb250cmFzdCA8LSBsaXN0KAogIAogIGdyb3VwX1VJX0RveHBsdXNfdnNfbWludXMgPSBjKCJncm91cCIsICJCUkJfVUlfRG94UGx1cyIsICJCUkJfVUlfRG94TWludXMiKSwKICBncm91cF8waF9Eb3hwbHVzX3ZzX21pbnVzID0gYygiZ3JvdXAiLCAiQlJCXzBoX0RveFBsdXMiLCAiQlJCXzBoX0RveE1pbnVzIiksCiAgZ3JvdXBfMjRoX0RveHBsdXNfdnNfbWludXMgPSBjKCJncm91cCIsICJCUkJfMjRoX0RveFBsdXMiLCAiQlJCXzI0aF9Eb3hNaW51cyIpLAogIGdyb3VwXzQ4aF9Eb3hwbHVzX3ZzX21pbnVzID0gYygiZ3JvdXAiLCAiQlJCXzQ4aF9Eb3hQbHVzIiwgIkJSQl80OGhfRG94TWludXMiKQogIAogIAogICNncm91cF9VSV9Eb3hwbHVzX3ZzX21pbnVzID0gYygiZ3JvdXAiLCAiRG94cGx1c19VSSIsICJEb3htaW51c19VSSIpLAogICNncm91cF9EaWZmMGhfRG94cGx1c192c19taW51cyA9IGMoImdyb3VwIiwgIkRveHBsdXNfRGlmZjBoIiwgIkRveG1pbnVzX0RpZmYwaCIpLAogICNncm91cF9EaWZmMjRoX0RveHBsdXNfdnNfbWludXMgPSBjKCJncm91cCIsICJEb3hwbHVzX0RpZmYyNGgiLCAiRG94bWludXNfRGlmZjI0aCIpLAogICNncm91cF9EaWZmNDhoX0RveHBsdXNfdnNfbWludXMgPSBjKCJncm91cCIsICJEb3hwbHVzX0RpZmY0OGgiLCAiRG94bWludXNfRGlmZjQ4aCIpCiAgCiAgCiAgI0ludGVyY2VwdCA9IGxpc3QoIkludGVyY2VwdCIpLCAjIHJlZmVyZW5jZSBsZXZlbAogICNsZWdfTHZzUiA9IGMoImxlZyIsICJMIiwgIlIiKSwKICAjZW56X0t2c0MgPSBjKCJlbnp5bWUiLCJLIiwiQyIpCiAgI2xlZ0wuZW56SyA9IGxpc3QoImxlZ0wuZW56eW1lSyIpICMgaW50ZXJhY3Rpb24KICAKICAjdHlwZV9Eb3hwbHVzX3ZzX21pbnVzID0gYygidHlwZSIsICJEb3hwbHVzIiwgIkRveG1pbnVzIikKKQpgYGAKCgoKIyMjIFJldHJpZXZlIEJpb21hcnQKCmBgYHtyIGJpb21hcnQsIGNhY2hlPVRSVUV9CiNpZighZXhpc3RzKCJlMmciKSl7CiMgICNlbnNlbWJsIDwtIGJpb21hUnQ6OnVzZU1hcnQoIkVOU0VNQkxfTUFSVF9FTlNFTUJMIixob3N0PSJhc2lhLmVuc2VtYmwub3JnIikKIyAgI2Vuc2VtYmwgPC0gYmlvbWFSdDo6dXNlTWFydCgiRU5TRU1CTF9NQVJUX0VOU0VNQkwiLGhvc3Q9InVzd2VzdC5lbnNlbWJsLm9yZyIpCiMgIGVuc2VtYmwgPC0gYmlvbWFSdDo6dXNlTWFydCgiRU5TRU1CTF9NQVJUX0VOU0VNQkwiLGhvc3Q9InVzZWFzdC5lbnNlbWJsLm9yZyIpCiMgIG1hcnQgPC0gYmlvbWFSdDo6dXNlRGF0YXNldChiaW9tYXJ0YW5uLG1hcnQ9ZW5zZW1ibCkKIyAgZTJnIDwtIGJpb21hUnQ6OmdldEJNKGF0dHJpYnV0ZXM9YygiZW5zZW1ibF9nZW5lX2lkIiwiZXh0ZXJuYWxfZ2VuZV9uYW1lIiwKIyAgICAiZ2VuZV9iaW90eXBlIiwiY2hyb21vc29tZV9uYW1lIiksIG1hcnQ9bWFydCkgJT4lIGFzX3RpYmJsZSAlPiUKIyAgcmVuYW1lKAojICAgIGVuc19nZW5lID0gZW5zZW1ibF9nZW5lX2lkLAojICAgIGV4dF9nZW5lID0gZXh0ZXJuYWxfZ2VuZV9uYW1lLAojICAgIGJpb3R5cGUgPSBnZW5lX2Jpb3R5cGUsCiMgICAgY2hyID0gY2hyb21vc29tZV9uYW1lCiMgICkKI30KCmUyZyA8LSByZWFkcjo6cmVhZF9jc3YoIi9ob21lL2d1ZXN0QS9vNzA1NzhhL2FrdXdha2Fkby9rdXdha2Fkby9CUkJTZXEvSDNtbTE4X0RveF8wNDMybGFuZTIvRmluYWxfTGFzdF9Sc2VydmVyXzIwMDgxMS9lbnNlbWJsZV9saXN0X3VzZWFzdC5jc3YiKQoKYW5ub3RhdGUgPC0gcGFydGlhbChyaWdodF9qb2luLGUyZyxieT0iZW5zX2dlbmUiKQoKI2Fubm90YXRlIDwtIHBhcnRpYWwocmlnaHRfam9pbixlMmcsYnk9ImVuc19nZW5lIikKCiMtLS0tLSMKbnJvdyhlMmcpCiNyZWFkcjo6d3JpdGVfY3N2KGUyZywiZW5zZW1ibGVfbGlzdF9hc2lhLmNzdiIpCiNyZWFkcjo6d3JpdGVfY3N2KGUyZywiZW5zZW1ibGVfbGlzdF91c3dlc3QuY3N2IikKI3JlYWRyOjp3cml0ZV9jc3YoZTJnLCJlbnNlbWJsZV9saXN0X3VzZWFzdC5jc3YiKQpgYGAKCiMjIyBMb2FkIGNvdW50cwoKYGBge3IgbG9hZCBBVEFDIENoSUwgY291bnR9CgpmaWxlcGF0aF9zdW1tYXJ5IDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL0NoSUwwMTEwMDExMV9BVEFDMDA0OUwxX18zVDNfRUdGUDE4X0RveF9fVFNTX3BtNWtiXzIwMjAwNjI0LmNvdW50LnR4dCIKCmZpbGVwYXRoX3NlbGVjdGVkVFNTY291bnQgPC0gIi9ob21lL2d1ZXN0QS9vNzA1NzhhL2FrdXdha2Fkby9rdXdha2Fkby9DaElMU2VxMi9Lb21hdHN1XzNUM19FR0ZQX0gzbW0xOF9Eb3hfY2hJbF8wMTExTk9WQXNlcS9UU1NfY291bnQvQ2hJTEFsbF9UU1NfcG01a2Jfd2l0aEFUQUMvUl9zZXJ2ZXJfTGFzdF8yMDIwMDgxMV9CUkJfQVRBQ19DaElMX2Zpc3RFeG9uX21haW5IM3AzL0NoSUwwMTEwMDExMV9BVEFDMDA0OUwxX18zVDNfRUdGUDE4X0RveF9fVFNTX3BtNWtiXzIwMjAwNjI0LmNvdW50X19jb3VudF9maXJzdFRTU19zZWxlY3QuY3N2IgoKCmNvbG5hbWVzX3RpdGxlIDwtIGMoImVuc19nZW5lIiwiY2hyIiwiVFNTc3RhcnQiLCJUU1NlbmQiLCJzdHJhbmQiLCJUU1MiLCJTdGFydCIsIkVuZCIpCiAgCnNhbXBsZXNfQVRBQyA8LSBjKAogICJBVEFDX1VJX0RveE1pbnVzXzEiLCJBVEFDX1VJX0RveE1pbnVzXzIiLCJBVEFDX1VJX0RveE1pbnVzXzMiLCJBVEFDX1VJX0RveE1pbnVzXzQiLAogICJBVEFDX1VJX0RveFBsdXNfMSIsIkFUQUNfVUlfRG94UGx1c18yIiwiQVRBQ19VSV9Eb3hQbHVzXzMiLCJBVEFDX1VJX0RveFBsdXNfNCIsCiAgIkFUQUNfNDhoX0RveE1pbnVzXzEiLCJBVEFDXzQ4aF9Eb3hNaW51c18yIiwiQVRBQ180OGhfRG94TWludXNfMyIsIkFUQUNfNDhoX0RveE1pbnVzXzQiLAogICJBVEFDXzQ4aF9Eb3hQbHVzXzEiLCJBVEFDXzQ4aF9Eb3hQbHVzXzIiLCJBVEFDXzQ4aF9Eb3hQbHVzXzMiLCJBVEFDXzQ4aF9Eb3hQbHVzXzQiKQoKc2FtcGxlc19IM3AzIDwtIGMoCiAgIkgzcDNfVUlfRG94TWludXNfMSIsIkgzcDNfVUlfRG94TWludXNfMiIsIkgzcDNfVUlfRG94UGx1c18xIiwiSDNwM19VSV9Eb3hQbHVzXzIiLAogICJIM3AzXzBoX0RveE1pbnVzXzEiLCJIM3AzXzBoX0RveE1pbnVzXzIiLCJIM3AzXzBoX0RveFBsdXNfMSIsIkgzcDNfMGhfRG94UGx1c18yIiwKICAiSDNwM18yNGhfRG94TWludXNfMSIsIkgzcDNfMjRoX0RveE1pbnVzXzIiLCJIM3AzXzI0aF9Eb3hQbHVzXzEiLCJIM3AzXzI0aF9Eb3hQbHVzXzIiLAogICJIM3AzXzQ4aF9Eb3hNaW51c18xIiwiSDNwM180OGhfRG94TWludXNfMiIsIkgzcDNfNDhoX0RveFBsdXNfMSIsIkgzcDNfNDhoX0RveFBsdXNfMiIpCgpzYW1wbGVzX0gzSzI3YWMgPC0gYygKICAiSDNLMjdhY19VSV9Eb3hNaW51c18xIiwiSDNLMjdhY19VSV9Eb3hNaW51c18yIiwiSDNLMjdhY19VSV9Eb3hQbHVzXzEiLCJIM0syN2FjX1VJX0RveFBsdXNfMiIsCiAgIkgzSzI3YWNfMGhfRG94TWludXNfMSIsIkgzSzI3YWNfMGhfRG94TWludXNfMiIsIkgzSzI3YWNfMGhfRG94UGx1c18xIiwiSDNLMjdhY18waF9Eb3hQbHVzXzIiLAogICJIM0syN2FjXzI0aF9Eb3hNaW51c18xIiwiSDNLMjdhY18yNGhfRG94TWludXNfMiIsIkgzSzI3YWNfMjRoX0RveFBsdXNfMSIsIkgzSzI3YWNfMjRoX0RveFBsdXNfMiIsCiAgIkgzSzI3YWNfNDhoX0RveE1pbnVzXzEiLCJIM0syN2FjXzQ4aF9Eb3hNaW51c18yIiwiSDNLMjdhY180OGhfRG94UGx1c18xIiwiSDNLMjdhY180OGhfRG94UGx1c18yIikKCnNhbXBsZXNfSDNLNG1lMyA8LSBjKAogICJIM0s0bWUzX1VJX0RveE1pbnVzXzEiLCJIM0s0bWUzX1VJX0RveE1pbnVzXzIiLCJIM0s0bWUzX1VJX0RveFBsdXNfMSIsIkgzSzRtZTNfVUlfRG94UGx1c18yIiwKICAiSDNLNG1lM18waF9Eb3hNaW51c18xIiwiSDNLNG1lM18waF9Eb3hNaW51c18yIiwiSDNLNG1lM18waF9Eb3hQbHVzXzEiLCJIM0s0bWUzXzBoX0RveFBsdXNfMiIsCiAgIkgzSzRtZTNfMjRoX0RveE1pbnVzXzEiLCJIM0s0bWUzXzI0aF9Eb3hNaW51c18yIiwiSDNLNG1lM18yNGhfRG94UGx1c18xIiwiSDNLNG1lM18yNGhfRG94UGx1c18yIiwKICAiSDNLNG1lM180OGhfRG94TWludXNfMSIsIkgzSzRtZTNfNDhoX0RveE1pbnVzXzIiLCJIM0s0bWUzXzQ4aF9Eb3hQbHVzXzEiLCJIM0s0bWUzXzQ4aF9Eb3hQbHVzXzIiKQoKCnNlbGVjdGVkVFNTY291bnQgPC0gcmVhZHI6OnJlYWRfY3N2KGZpbGVwYXRoX3NlbGVjdGVkVFNTY291bnQpICU+JSBtdXRhdGVfaWYoaXMuZG91YmxlLCBhcy5pbnRlZ2VyKQpzZWxlY3RlZFRTU2NvdW50MSA8LSBzZWxlY3RlZFRTU2NvdW50ICU+JSBkcGx5cjo6c2VsZWN0KGFsbF9vZihjb2xuYW1lc190aXRsZSksIGFsbF9vZihzYW1wbGVzX0gzcDMpLCBhbGxfb2Yoc2FtcGxlc19IM0s0bWUzKSxhbGxfb2Yoc2FtcGxlc19IM0syN2FjKSwgYWxsX29mKHNhbXBsZXNfQVRBQykpICU+JSBkcGx5cjo6cmVuYW1lKFRTU21pbnVzNWtiPVRTU3N0YXJ0LFRTU3BsdXM1a2I9VFNTZW5kKQoKbnJvdyhzZWxlY3RlZFRTU2NvdW50KQpjb2xuYW1lcyhzZWxlY3RlZFRTU2NvdW50KQoKIyMjIwpucm93KHNlbGVjdGVkVFNTY291bnQxKQpjb2xuYW1lcyhzZWxlY3RlZFRTU2NvdW50MSkKcHJpbnQoc2VsZWN0ZWRUU1Njb3VudDEpCiMjIyMgc2F2ZQpUU1Njb3VudF93cml0ZWZpbGUxIDwtIGJhc2VuYW1lKGZpbGVwYXRoX3NlbGVjdGVkVFNTY291bnQpICU+JSBnc3ViKCJDaElMMDExMDAxMTEiLCJDaElMc2VxIiwuKSAlPiUgZ3N1YigiQVRBQzAwNDlMMSIsIkFUQUNzZXEiLC4pICU+JSBnc3ViKCIuY291bnRfX2NvdW50X2ZpcnN0VFNTX3NlbGVjdCIsIl9fQ291bnRNYXRyaXgiLC4pICU+JSBnc3ViKCIuY291bnRfX2NvdW50X2ZpcnN0VFNTX3NlbGVjdCIsIl9fX0NvdW50TWF0cml4IiwuKQpwcmludChUU1Njb3VudF93cml0ZWZpbGUxKQpzZWxlY3RlZFRTU2NvdW50MSAlPiUgcmVhZHI6OndyaXRlX2NzdihUU1Njb3VudF93cml0ZWZpbGUxKSAjI+OBk+OCjOOCkueZu+mMsgojIwoKYGBgCgoKYGBge3IgbG9hZCBsb2cyRkN9Cgoj44Gd44KM44Ge44KM44GubG9nMkZDICjoqq3jgb/ovrzjgb/jgYzlpKflpInjgarjgZ/jgoHjgIHjgZ3jga7jgb7jgb7nmbvpjLIpCmZpbGVwYXRoX2xvZzJGQ19IM3AzIDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy8yZ3VuL1RTU19wbTVrYl8yMDIwMDYyNF9yZXN1bHRzYWxsX2ZkcjBwMV9IM3AzLmNzdiIKCmZpbGVwYXRoX2xvZzJGQ19IM0s0bWUzIDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy8yZ3VuL1RTU19wbTVrYl8yMDIwMDYyNF9yZXN1bHRzYWxsX2ZkcjBwMV9IM0s0bWUzLmNzdiIKCmZpbGVwYXRoX2xvZzJGQ19IM0syN2FjIDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy8yZ3VuL1RTU19wbTVrYl8yMDIwMDYyNF9yZXN1bHRzYWxsX2ZkcjBwMV9IM0syN2FjLmNzdiIKCmZpbGVwYXRoX2xvZzJGQ19BVEFDIDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy8yZ3VuL1RTU19wbTVrYl8yMDIwMDYyNF9yZXN1bHRzYWxsX2ZkcjBwMV9BVEFDLmNzdiIKCiMjIyMKCmxvZzJGQ19IM3AzIDwtIHJlYWRyOjpyZWFkX2NzdihmaWxlcGF0aF9sb2cyRkNfSDNwMykKY29sbmFtZXMobG9nMkZDX0gzcDMpCmxvZzJGQ19IM3AzICU+JSBncm91cF9ieShhc3BlY3QpICU+JSAgc3VtbWFyaXNlKG4oKSkKIyMjIwpsb2cyRkNfSDNLNG1lMyA8LSByZWFkcjo6cmVhZF9jc3YoZmlsZXBhdGhfbG9nMkZDX0gzSzRtZTMpCmNvbG5hbWVzKGxvZzJGQ19IM0s0bWUzKQpsb2cyRkNfSDNLNG1lMyAlPiUgZ3JvdXBfYnkoYXNwZWN0KSAlPiUgIHN1bW1hcmlzZShuKCkpCiMjIyMKbG9nMkZDX0gzSzI3YWMgPC0gcmVhZHI6OnJlYWRfY3N2KGZpbGVwYXRoX2xvZzJGQ19IM0syN2FjKQpjb2xuYW1lcyhsb2cyRkNfSDNLMjdhYykKbG9nMkZDX0gzSzI3YWMgJT4lIGdyb3VwX2J5KGFzcGVjdCkgJT4lICBzdW1tYXJpc2UobigpKQojIyMjCmxvZzJGQ19BVEFDIDwtIHJlYWRyOjpyZWFkX2NzdihmaWxlcGF0aF9sb2cyRkNfQVRBQykKY29sbmFtZXMobG9nMkZDX0FUQUMpCmxvZzJGQ19BVEFDICU+JSBncm91cF9ieShhc3BlY3QpICU+JSAgc3VtbWFyaXNlKG4oKSkKIyMjIwpgYGAKCgpgYGB7ciBsb2FkIGxvZzJGQyBjb3JyZWxhdGlvbiB0YWJsZX0KCmxvZzJGQ19jb3JyZWxhdGlvbmxpc3QgPC0gcmVhZHI6OnJlYWRfY3N2KCIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy9sb2cyRkMvdGFibGVzL1NwcmVhZF9sb2cyRkNfQ2hJTEFUQUNCUkJfY3V0b2ZmMTBfX3dpdGhDbHVzdGVyX19IM3AzY2x1czMuY3N2IikKCmxvZzJGQ19jb3JydGFibGUgPC0gbG9nMkZDX2NvcnJlbGF0aW9ubGlzdCAlPiUgZHBseXI6OnNlbGVjdCgtSDNLMjdtZTMpICU+JSBkcGx5cjo6cmVuYW1lKEgzcDNfbG9nMkZDX0RveHBsdXNfdnNfbWludXM9SDNwMywgIEgzSzRtZTNfbG9nMkZDX0RveHBsdXNfdnNfbWludXM9SDNLNG1lMywgSDNLMjdhY19sb2cyRkNfRG94cGx1c192c19taW51cz1IM0syN2FjLCBBVEFDX2xvZzJGQ19Eb3hwbHVzX3ZzX21pbnVzPUFUQUMsIEJSQl9sb2cyRkNfRG94cGx1c192c19taW51cz1CUkIpICU+JSBkcGx5cjo6cmVuYW1lKEJSQl9ub3JtYWxpemVkY291bnRfZ3JvdXBNZWFuPUJSQmdyb3VwTWVhbikKCm5yb3cobG9nMkZDX2NvcnJlbGF0aW9ubGlzdCkKY29sbmFtZXMobG9nMkZDX2NvcnJlbGF0aW9ubGlzdCkKbnJvdyhsb2cyRkNfY29ycnRhYmxlKQpjb2xuYW1lcyhsb2cyRkNfY29ycnRhYmxlKQoKCmxvZzJGQ19jb3JydGFibGUgJT4lIGdyb3VwX2J5KHRpbWUpICU+JSBzdW1tYXJpc2UoY291bnQ9bigpKQpsb2cyRkNfY29ycnRhYmxlICU+JSBmaWx0ZXIoIWlzLm5hKEJSQl9ub3JtYWxpemVkY291bnRfZ3JvdXBNZWFuKSkgJT4lIGdyb3VwX2J5KHRpbWUpICU+JSBzdW1tYXJpc2UoY291bnQ9bigpKQojIyMKbG9nMkZDX2NvcnJ0YWJsZSAlPiUgZ3JvdXBfYnkodGltZSkgJT4lIGZpbHRlcihCUkJERUdjbHVzdGVyPT0iMyIpICU+JSBzdW1tYXJpc2UoY291bnQ9bigpKQpsb2cyRkNfY29ycnRhYmxlICU+JSBmaWx0ZXIoIWlzLm5hKEJSQl9ub3JtYWxpemVkY291bnRfZ3JvdXBNZWFuKSkgJT4lIGdyb3VwX2J5KHRpbWUpICU+JSBmaWx0ZXIoQlJCREVHY2x1c3Rlcj09IjMiKSAlPiUgc3VtbWFyaXNlKGNvdW50PW4oKSkKIyMjCmxvZzJGQ19jb3JydGFibGUgJT4lIGdyb3VwX2J5KHRpbWUpICU+JSBmaWx0ZXIoQlJCREVHY2x1c3Rlcj09IjMiKSAlPiUgZmlsdGVyKGV4dF9nZW5lPT0iQWN0YTEiKQoKYGBgCmBgYHtyIGxvYWQgen0KCiIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy9UU1NfcG01a2JfMjAyMDA2MjRfX3pzY29yZV9BbGwuY3N2IgoKYGBgCgoKYGBge3IgbG9hZCBOb3JtIGNvdW50fQoKI+OBneOCjOOBnuOCjOOBrk5vcm1Db3VudCAo6Kqt44G/6L6844G/44GM5aSn5aSJ44Gq44Gf44KB44CB44Gd44Gu44G+44G+55m76YyyKQpmaWxlcGF0aF9Ob3JtY291bnRfSDNwMyA8LSAiL2hvbWUvZ3Vlc3RBL283MDU3OGEvYWt1d2FrYWRvL2t1d2FrYWRvL0NoSUxTZXEyL0tvbWF0c3VfM1QzX0VHRlBfSDNtbTE4X0RveF9jaElsXzAxMTFOT1ZBc2VxL1RTU19jb3VudC9DaElMQWxsX1RTU19wbTVrYl93aXRoQVRBQy9SX3NlcnZlcl9MYXN0XzIwMjAwODExX0JSQl9BVEFDX0NoSUxfZmlzdEV4b25fbWFpbkgzcDMvVFNTX3BtNWtiXzIwMjAwNjI0X19ub3JtY291bnRfSDNwM19nZW5lbmFtZS5jc3YiCmZpbGVwYXRoX05vcm1jb3VudF9IM0s0bWUzIDwtICIvaG9tZS9ndWVzdEEvbzcwNTc4YS9ha3V3YWthZG8va3V3YWthZG8vQ2hJTFNlcTIvS29tYXRzdV8zVDNfRUdGUF9IM21tMThfRG94X2NoSWxfMDExMU5PVkFzZXEvVFNTX2NvdW50L0NoSUxBbGxfVFNTX3BtNWtiX3dpdGhBVEFDL1Jfc2VydmVyX0xhc3RfMjAyMDA4MTFfQlJCX0FUQUNfQ2hJTF9maXN0RXhvbl9tYWluSDNwMy9UU1NfcG01a2JfMjAyMDA2MjRfX25vcm1jb3VudF9IM0s0bWUzX2dlbmVuYW1lLmNzdiIKZmlsZXBhdGhfTm9ybWNvdW50X0gzSzI3YWMgPC0gIi9ob21lL2d1ZXN0QS9vNzA1NzhhL2FrdXdha2Fkby9rdXdha2Fkby9DaElMU2VxMi9Lb21hdHN1XzNUM19FR0ZQX0gzbW0xOF9Eb3hfY2hJbF8wMTExTk9WQXNlcS9UU1NfY291bnQvQ2hJTEFsbF9UU1NfcG01a2Jfd2l0aEFUQUMvUl9zZXJ2ZXJfTGFzdF8yMDIwMDgxMV9CUkJfQVRBQ19DaElMX2Zpc3RFeG9uX21haW5IM3AzL1RTU19wbTVrYl8yMDIwMDYyNF9fbm9ybWNvdW50X0gzSzI3YWNfZ2VuZW5hbWUuY3N2IgpmaWxlcGF0aF9Ob3JtY291bnRfQVRBQyA8LSAiL2hvbWUvZ3Vlc3RBL283MDU3OGEvYWt1d2FrYWRvL2t1d2FrYWRvL0NoSUxTZXEyL0tvbWF0c3VfM1QzX0VHRlBfSDNtbTE4X0RveF9jaElsXzAxMTFOT1ZBc2VxL1RTU19jb3VudC9DaElMQWxsX1RTU19wbTVrYl93aXRoQVRBQy9SX3NlcnZlcl9MYXN0XzIwMjAwODExX0JSQl9BVEFDX0NoSUxfZmlzdEV4b25fbWFpbkgzcDMvVFNTX3BtNWtiXzIwMjAwNjI0X19ub3JtY291bnRfQVRBQ19nZW5lbmFtZS5jc3YiCgpyZWFkcjo6cmVhZF9jc3YoZmlsZXBhdGhfTm9ybWNvdW50X0gzcDMpCnJlYWRyOjpyZWFkX2NzdihmaWxlcGF0aF9Ob3JtY291bnRfSDNLNG1lMykKcmVhZHI6OnJlYWRfY3N2KGZpbGVwYXRoX05vcm1jb3VudF9IM0syN2FjKQpyZWFkcjo6cmVhZF9jc3YoZmlsZXBhdGhfTm9ybWNvdW50X0FUQUMpCgpgYGAK